package org.liuwei.concurent04.CurrentLimit04;

import java.util.concurrent.TimeUnit;

import com.google.common.util.concurrent.RateLimiter;

//因为SmoothBursty允许一定程度的突发，会有人担心如果允许这种突发，假设突然间来了很大的流量，
//那么系统很可能扛不住这种突发。因此需要一种平滑速率的限流工具，
//从而系统冷启动后慢慢的趋于平均固定速率（即刚开始速率小一些，然后慢慢趋于我们设置的固定速率）。
//Guava也提供了SmoothWarmingUp来实现这种需求，其可以认为是漏桶算法，但是在某些特殊场景又不太一样。
public class CurrentLimit4 {

	public static void main(String[] args) throws InterruptedException {

		RateLimiter limiter = RateLimiter.create(5, 1000, TimeUnit.MILLISECONDS);
		for (int i = 1; i < 5; i++) {
			System.out.println(limiter.acquire());
		}
		Thread.sleep(1000L);
		for (int i = 1; i < 5; i++) {
			System.out.println(limiter.acquire());
		}
	}

}